package com.xframe.common.core.service.login;

import com.xframe.domain.role.IUserCredentials;

/**
 * 功能描述: 对登录令牌的管理接口
 *
 * @author xufeng
 * @version 1.0
 * @date 2023-5-31
 */
public interface ITokenService {

    /**
     * 创建一个令牌
     * @param userCredentials 用户凭证
     *
     * @return token令牌
     */
    String createToken (IUserCredentials userCredentials);

    /**
     * 根据令牌和数据类型获得一个用户凭证
     * @param token 令牌
     * @param dataType 数据类型
     * @param isNullthrow 如果为空是否抛出异常
     *
     * @return userCredentials 用户凭证
     */
    IUserCredentials getUserCredentials (String token,Class<?> dataType,boolean isNullthrow);

    /**
     * 保存令牌到持久化设置上
     * @param token 令牌
     * @param userCredentials 用户凭证
     * @param second 令牌过期时间
     *
     * @return
     */
    void saveUserCredentials(String token,IUserCredentials userCredentials,int second);

    /**
     * 更新令牌的TTL
     * @param token 令牌
     * @param userCredentials 用户凭证
     * @param second 令牌过期时间
     *
     * @return
     */
    void updateUserCredentials(String token,IUserCredentials userCredentials,int second);

    /**
     * 根据一个用户凭证ID来判断登录状态
     * @param userId 用户凭证ID
     *
     * @return true已经登录 false没有登陆
     */
    boolean existsUserCredentials(String userId);

    /**
     * 删除一个用户凭证
     * @param userCredentials 用户凭证
     *
     * @return
     */
    void delUserCredentials(IUserCredentials userCredentials);



}
